/**
 * 熵巡 - 企业级氚云OpenAPI数据管理平台
 * 开发归属 Alyr.net
 * 基础配置模块
 * 尊重劳动成果是一种美德
 */

let isConfigLoading = false;
let currentConfig = {};

// 页面加载后初始化
document.addEventListener('DOMContentLoaded', function() {
    // 在TAB切换时检查是否需要显示基础配置界面
    const observer = new MutationObserver(function(mutations) {
        mutations.forEach(function(mutation) {
            if (mutation.type === 'attributes' && mutation.attributeName === 'class') {
                const target = mutation.target;
                if (target.id === 'basic-config' && target.classList.contains('active') && !isConfigLoading) {
                    loadConfigInterface();
                }
            }
        });
    });
    
    const configTab = document.getElementById('basic-config');
    if (configTab) {
        observer.observe(configTab, { attributes: true });
    }
    
    // 如果基础配置TAB已经是激活状态,直接初始化
    if (configTab && configTab.classList.contains('active')) {
        setTimeout(loadConfigInterface, 500);
    }
});

// 加载配置界面
function loadConfigInterface() {
    const formDiv = document.getElementById('config-form');
    if (!formDiv) {
        return;
    }
    
    if (isConfigLoading) return;
    isConfigLoading = true;
    
    // 从config.php获取配置信息
    fetch('api/get_config.php')
        .then(response => response.json())
        .then(data => {
            if (data.success) {
                currentConfig = data.config;
                displayConfigForm(data.config);
                
                // 自动运行接口测试
                setTimeout(() => {
                    runAllTests();
                }, 500);
            }
        })
        .catch(error => {})
        .finally(() => {
            isConfigLoading = false;
        });
}

// 转义HTML
function escapeHtml(text) {
    if (typeof text !== 'string') {
        return String(text || '');
    }
    
    const div = document.createElement('div');
    div.textContent = text;
    return div.innerHTML;
}

// 显示配置表单
function displayConfigForm(config) {
    const formDiv = document.getElementById('config-form');
    if (!formDiv) {
        return;
    }
    
    const html = `
        <div class="config-sections">
            <div class="config-section">
                <h4>连接配置</h4>
                <div style="margin-bottom: 15px;">
                    <label class="form-label">应用编码 (AppCode)</label>
                    <input type="text" id="appCode" class="form-input" value="${escapeHtml(config.appCode)}" placeholder="应用编码">
                </div>
                
                <div style="margin-bottom: 15px;">
                    <label class="form-label">应用密钥 (AppSecret)</label>
                    <div style="position: relative;">
                        <input type="password" id="appSecret" class="form-input" value="${escapeHtml(config.appSecret)}" placeholder="应用密钥" style="padding-right: 60px;">
                        <button type="button" onclick="togglePasswordVisibility('appSecret')" style="position: absolute; right: 8px; top: 50%; transform: translateY(-50%); background: #f8f9fa; border: 1px solid #ddd; padding: 4px 8px; border-radius: 3px; cursor: pointer; color: #666; font-size: 12px;">显示</button>
                    </div>
                </div>
                
                <div style="margin-bottom: 15px;">
                    <label class="form-label">基础URL</label>
                    <input type="text" id="baseUrl" class="form-input" value="${escapeHtml(config.baseUrl)}" placeholder="https://www.h3yun.com/OpenApi/Invoke">
                </div>
                
                <div class="form-group">
                    <label class="form-label">
                        <input type="checkbox" id="debug" ${config.debug ? 'checked' : ''}> 开启调试模式
                    </label>
                </div>
            </div>
            
            <div class="config-section">
                <h4>接口测试</h4>
                <div class="test-panel">
                    <div class="test-item">
                        <p>测试与氚云服务器的连接状态</p>
                        <div id="connection-result" class="test-result">等待测试...</div>
                    </div>
                    
                    <div class="test-item">
                        <p>测试API认证信息是否正确</p>
                        <div id="auth-result" class="test-result">等待测试...</div>
                    </div>
                    
                    <div class="test-item">
                        <p>测试数据接口调用功能</p>
                        <div id="api-result" class="test-result">等待测试...</div>
                    </div>
                </div>
            </div>
        </div>
        
        <div class="config-actions" style="text-align: center;">
            <button class="btn btn-primary" onclick="saveConfig()">保存配置</button>
            <button class="btn btn-secondary" onclick="resetConfig()">重置配置</button>
        </div>
    `;
    
    formDiv.innerHTML = html;
    formDiv.style.display = 'block';
}

// 更新配置状态显示
function updateConfigStatus(message, type) {
    const statusElement = document.getElementById('config-status');
    if (statusElement) {
        statusElement.textContent = message;
        statusElement.className = 'config-status ' + (type || 'info');
        statusElement.style.display = 'block';
    }
}

// 切换密码显示/隐藏
function togglePasswordVisibility(fieldId) {
    const field = document.getElementById(fieldId);
    const button = field.nextElementSibling;
    
    if (field) {
        if (field.type === 'password') {
            field.type = 'text';
            if (button) button.textContent = '隐藏';
        } else {
            field.type = 'password';
            if (button) button.textContent = '显示';
        }
    }
}

// 保存配置
function saveConfig() {
    const formData = {
        baseUrl: document.getElementById('baseUrl').value.trim(),
        appCode: document.getElementById('appCode').value.trim(),
        appSecret: document.getElementById('appSecret').value.trim(),
        debug: document.getElementById('debug').checked
    };
    
    // 验证必填字段
    if (!formData.baseUrl || !formData.appCode || !formData.appSecret) {
        alert('请填写完整的API连接配置信息');
        return;
    }
    
    // 生成新的PHP配置文件内容
    const phpContent = generatePhpConfig(formData);
    
    // 发送保存请求
    fetch('api/save_config.php', {
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify({
            config_content: phpContent
        })
    })
    .then(response => response.json())
    .then(data => {
        if (data.success) {
            currentConfig = formData;
            
            // 提示重新加载页面
            if (confirm('配置已保存成功！为了使新配置生效，建议刷新页面。是否立即刷新？')) {
                window.location.reload();
            }
        } else {
            alert('配置保存失败: ' + (data.message || '未知错误'));
        }
    })
    .catch(error => {
        alert('配置保存失败: ' + error.message);
    });
}

// 生成PHP配置文件内容
function generatePhpConfig(config) {
    const debugStr = config.debug ? 'true' : 'false';
    
    return `<?php
/**
 * 氚云API管理系统配置文件
 * Alyr.net 企业级配置管理
 */

// 氮云API配置
return [
    'baseUrl' => '${config.baseUrl}',
    'appCode' => '${config.appCode}',
    'appSecret' => '${config.appSecret}',
    'debug' => ${debugStr}
];`;
}

// 测试连接
function testConnection() {
    updateConfigStatus('正在运行接口测试...', 'loading');
    
    // 重置测试结果
    resetTestResults();
    
    // 执行所有测试
    runAllTests();
}

// 重置测试结果
function resetTestResults() {
    const results = ['connection-result', 'auth-result', 'api-result'];
    results.forEach(id => {
        const element = document.getElementById(id);
        if (element) {
            element.textContent = '正在检测...';
            element.className = 'test-result';
            element.style.display = 'block';
        }
    });
}

// 运行所有测试
function runAllTests() {
    fetch('api/api-test.php')
        .then(response => response.json())
        .then(data => {
            // 更新连接测试结果
            let connMsg = data.connection_msg || (data.connection ? '连接成功' : '连接失败');
            if (data.http_code) {
                connMsg += ' (HTTP ' + data.http_code + ')';
            }
            updateTestResult('connection-result', data.connection, connMsg);
            
            // 更新认证测试结果
            updateTestResult('auth-result', data.auth, data.auth_msg || (data.auth ? '认证成功' : '认证失败'));
            
            // 更新API测试结果
            updateTestResult('api-result', data.api, data.api_msg || (data.api ? 'API调用成功' : 'API调用失败'));
        })
        .catch(error => {
            // 更新所有测试结果为错误
            ['connection-result', 'auth-result', 'api-result'].forEach(id => {
                updateTestResult(id, false, '测试失败: ' + error.message);
            });
        });
}

// 更新测试结果
function updateTestResult(elementId, success, message = '') {
    const element = document.getElementById(elementId);
    if (!element) return;
    
    element.textContent = message || (success ? '测试成功' : '测试失败');
    element.className = 'test-result ' + (success ? 'success' : 'error');
}

// 重置配置
function resetConfig() {
    if (confirm('确定要重置所有配置到当前保存的状态吗？')) {
        displayConfigForm(currentConfig);
    }
}

// 转义HTML
function escapeHtml(text) {
    if (typeof text !== 'string') {
        return String(text || '');
    }
    
    const div = document.createElement('div');
    div.textContent = text;
    return div.innerHTML;
}